#include "alert.h"


//-----------------------------------------------------
Alert::Alert (const QDateTime &alertDateTime, const QString & message)
//
{
    configure (alertDateTime, message);
}
//-----------------------------------------------------------------
Alert::Alert (const int hours, const int minutes, const int seconds, const QString & message)
//
{
    QDateTime alertDateTime (now ().addSecs (hours * 3600 + minutes * 60 + seconds));

    configure (alertDateTime, message);
}
//--------------------------------------------------------------
void Alert::configure (const QDateTime &alertDateTime, const QString &message)
// configurer l'événement
{
    // vérifier la validité de la date et heure
    m_alertDateTime = alertDateTime;
    if (not alertDateTime.isValid ())
    {
        m_alertDateTime = now ().addSecs (60);
        setActive (m_alertDateTime > now ());
    }

    m_alertMessage = message;
    if (message.isEmpty ()) m_alertMessage = defaultMessage ();

    m_creationDateTime = now ();
}
//---------------------
bool Alert::timeIsUp ()
// indique si l'événement est arrivé à son terme
{
    return isActive () and (now () >= m_alertDateTime);
}
//--------------------
int Alert::timeLeft ()
// temps restant (en secondes)
{
    return now ().secsTo (m_alertDateTime);
}
//--------------------------
int Alert::secondsElapsed ()
// temps passé (en secondes)
{
    return m_creationDateTime.secsTo (now ());
}
//---------------------
int Alert::totalTime ()
// temps total demandé (en secondes)
{
    return m_creationDateTime.secsTo (m_alertDateTime);
}
//-----------------------
QString Alert::toolTip ()
// texte de l'infobulle
// sera différent selon qu'on est arrivé à la fin ou non
{
    QString text;

    if (isActive ())
    {
        QTime dt (QTime (0,0).addSecs (timeLeft ()));
        text = tr ("Dans %1h %2mn %3s : %4")
                     .arg (dt.hour ())
                     .arg (dt.minute ())
                     .arg (dt.second ())
                     .arg (m_alertMessage);
    }
    else
    {
        text = tr ("Le %1 à %2 : %3")
                     .arg (m_alertDateTime.toString ("d MMMM yyyy"))
                     .arg (m_alertDateTime.toString ("hh:mm:ss"))
                     .arg (m_alertMessage);
    }

    return text;
}
